home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Original Shareware 1.1
/
The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso
/
2
/
qblibs.zip
/
QBLIBS.DOC
Wrap
Text File
|
1987-03-06
|
12KB
|
331 lines
This document provides information on how to create a QuickBASIC library
of user routines.
One of the features that I found particularly appealing about
Microsoft's QuickBasic was that the documentation indicated that you
could create libraries of user routines. Unfortunately, when I
attempted to work with libraries I found that I had all sorts of
problems. Some of this was probably due to my own ineptitude, and some
due to Microsoft's documentation. Assuming that other programmers
attempting to use QuickBASIC libraries for the first time might
encounter the same problems, I created this document.
Please note that there is a glossary of terms that I will be using on
the last page.
There are a few assumptions that I make ...
1. The ultimate goal is to have free-standing programs created using
the /O compile option with the BCOM20 library, and at the same
time to be able to use those same routines during development (ie.
when using the QuickBASIC editor/compile to memory feature).
2. I assume that you have read the QuickBASIC reference manual on
user libraries. If you feel as frustrated as I did ... well, at
least I won't feel that I'm the only one who had problems.
Hopefully, you should be at the level where you understand that
when I refer to USERLIB as the library, you realize that this
could represent any name of your choice.
3. You have used, or at least understand, the "Separate Compilation"
method as outlined in Microsoft's manual.
4. Your modules are subroutines written using the SUB...END SUB form,
thus allowing you to pass parameters.
A couple of general points ...
1. QuickBASIC does NOT load USERLIB.EXE automatically as stated in
the manual .. at least I haven't been able to get it to work, and
I am using the LIB= function documented in the QuickBASIC manual.
But then again, you don't actually believe everything you read in
a manual, do you?. I suggest that you invoke the library manually
using the /L option as stated in the QuickBASIC manual; at least
THAT works.
2. If you have the LIB program from the Microsoft Macro Assembler,
you'll find it useful for maintaining your libraries. However, it
certainly is not required.
It might be useful at this point to look at the diagram at the bottom of
this document, and to refer to it while reading the following
descriptions. In the examples below, the extensions, and sometimes the
resulting file names, can be provided by the Microsoft programs by
default. However, for clarity, I have specified all extensions and
filenames.
Your modules to be accessed from within QuickBASIC during development
need to reside in USERLIB.EXE. To place them in that library ...
1. Compile your routines WITHOUT using the /O option to use the
BRUN20.LIB. This can be done either from within QB or using the
command line method.
Example : QB module.bas ;
2. Use BUILDLIB to place the resulting .OBJ files into the
USERLIB.EXE library (note the extension .EXE). Since BUILDLIB
creates the library from scratch each time, using the MAKE.EXE
utility supplied with the Microsoft Macro Assembler can help
automate this process (if you haven't seen it, MAKE.EXE can
rebuild the library any time one of the original routines is
changed).
Example : BUILDLIB module1.obj+module2.obj,userlib.exe ;
3. Start QB using your library name with the /L option, and the
routines will be available to you.
Example : QB /L userlib.exe
Modules that are to be used with your free-standing program are compiled
differently, and can optionally be stored in a true library.
1. Compile your routines WITH the /O option to use the BCOM20.LIB.
This can be done either from within QB or using the command line
method.
Example : QB module.bas /O ;
2. If you have it available, you can use the LIB.EXE program supplied
with the MS Macro Assembler to place the resulting .OBJ files into
a true USERLIB.LIB library file (note the extension .LIB).
LIB.EXE can use the MAKE.EXE utility to help automate maintenance
of this library.
Example : LIB myprogs.lib +module.obj ;
Note that if you had previously placed MODULE.OBJ in the library,
the command would be ...
Example : LIB myprogs.lib -+module.obj ;
3. If you don't have LIB.EXE, you can use the DOS COPY command to
place a number of
By now you realize that you are going to have two different types of
.OBJ files. Those you create from your subroutine compiled WITHOUT the
/O option to be used in USERLIB.EXE, and those compiled WITH the /O
option (optionally kept in USERLIB.LIB).
To avoid as much confusion as possible, I rename the .OBJ files created
for use with USERLIB.EXE as .RUN files since they required the run-time
library. The only inconvenience is that I have to specify the extension
when using BUILDLIB.
Example : QB module1.bas ;
REN module1.obj module1.run
BUILDLIB module1.run+module2.run,userlib.exe
When linking your free-standing modules, you will need to either specify
the individual .OBJ files, or, if you used LIB.EXE, the name of the
library you created.
Example : LINK
Object Modules [.OBJ] : main.obj+module1.obj
Run File [MAIN.EXE] :
List File [NUL.MAP] :
Libraries [.LIB] :
Example : LINK
Object Modules [.OBJ] : main.obj
Run File [MAIN.EXE] :
List File [NUL.MAP] :
Libraries [.LIB] : userlib
********************** +--------------------+
* PROGRAMS * | FILES |
********************** +--------------------+
+------------+
| MODULE.BAS |
+------------+
/ \
V V
********************** **********************
* QUICKBASIC * * QUICKBASIC *
* Compile WITHOUT /O * * Compile using /O *
********************** **********************
| |
V V
+--------------------+ +--------------------+
| MODULE.OBJ | | MODULE.OBJ |
+--------------------+ +--------------------+
| / .
V / .
********************** / .
* BUILDLIB * / This path is an alternate
********************** / depending on whether or not
| + you own the MS Macro Assembler
V | .
+--------------------+ | .
| USERLIB.EXE | | V
| for use w/ QBASIC | | **********************
+--------------------+ | * LIB *
| **********************
| .
| .
| V
+--------------------+ | +--------------------+
| MAIN.BAS | | | USERLIB.LIB |
+--------------------+ | | for use with LINK |
| | +--------------------+
V + .
********************** \ .
* QUICKBASIC * \ .
* Compile using /O * \ .
********************** \ .
| \ .
V V V
+-------------------+ **********************
| MAIN.OBJ |---------------> * LINK *
+-------------------+ **********************
|
V
+--------------------+
| MAIN.EXE |
+--------------------+
GLOSSARY OF TERMS
.OBJ file - A compiled subroutine or main program prior to linking or
installing in a library. THERE ARE TWO DIFFERENT TYPES OF OBJ
FILES. One type has been compiled WITH the /O option, the other
without.
BCOM20.LIB - The Microsoft library supplied with QuickBASIC that
provides the routines need by free-standing programs.
BRUN20.LIB - The Microsoft library supplied with QuickBASIC that is
used during the development cycle (editing, compiling to memory,
etc). This library is also used if you compile your program but
do not make it free-standing.
BUILDLIB.EXE - A support program from Microsoft that allows .OBJ files
to be placed into a library file for use with QuickBASIC during
development (editing, compiling to memory, etc).
Free-standing module/program - A program or subroutine that has been
compiled by QuickBASIC using the /O option so that it does not
require the BRUN20 library.
LIB.EXE - A support program from Microsoft that allows .OBJ files to
be placed into a library file that can be used with the LINK
program.
USERLIB.EXE - A file containing a collection of subroutines. These
routines are available within QuickBASIC during development
(editing, compiling to memory, etc).
USERLIB.LIB - A file containing a collection of subroutines. These
routines are available to be linked to your separately compiled
main programs.
------------------------------------------------------------------------
If you found this to be interest, have any comments or suggestions, or
tried to follow this but found it too confusing, drop me a note. In
particular, please let me know if you have any corrections I need to
make!
It would be nice to know if someone actually reads this.
Robert Potter
76266,2233